// 不能重复声明
// var a = 1;
// var a = 2;
// console.log(a)
// const b = 1
// const b = 2

// let c = 1
// let c = 2
// var/let 定义的值可以被修改，const 不可以
// var a = 1
// a = 2
// let b = 1
// b = 2
// // const c = 1
// // c = 2
// console.log(a, b)

// const PI = 3.1415926
// const a = {name: 'zhangsan'}
// a.age = 'lisi'
// console.log(a)
// a = {age: '20'}

// console.log(a)
// var a = 1

// var a
// console.log(a)
// a = 1
// console.log(b);
// let b = 1
// console.log(c);
// const c = 1
//场景：希望方法里面先输出a对象，然后根据判断在函数内重新赋值
// var a = {name: 'bin'}
// function fun() {
//   var a
//   console.log(a)
//   if(false) {
//     a = 2
//   }
// }
// fun()
// console.log(a)

//解构赋值
// var obj = {name: '斌', age: 20, car: '奔驰'}// 100个属性

// var name = obj.name
// var car = obj.car 

// var {car, name} = obj

// var {car: car, name: name} = obj

// var name;
// var car;
// {name: name, car: car} = {name: 'bin', car: '奔驰'}
// let [foo, { bar }] = [{ bar: 'bbb' }, 'aaa'];
// console.log(foo, bar)
// function a() {
//   console.log(name)
// }
// var name = '123'
// const a = {
//   name: 'bin',
//   age: 20,
//   car: '奔驰',
//   getName: function(){
//     console.log(this);
//     console.log(this.name)
//   }
// }
// a.getName()
// 'bin'

// const getAName = a.getName
// getAName()//'bin'
// function Student(name) {
//   console.log(arguments)
//   this.name = name;
// }
// var s1 = new Student('栾峰')
// console.log(s1)
// function myNew(name) {
//   var obj = Object.create(Student.prototype)
//   console.log(obj)
//   Student.call(obj, name)

//   return obj
// }



// var Person = () => {
//   console.log(arguments)
// }
// function myNew2(name, age, car) {
//  console.log(arguments)
// }
// myNew2('1','2','3')
// Person('2')
// var name = '123'
// function myNew2(name, age) {
//   console.log(this)
//   this.name = name
//   this.age = age
//   console.log(this)
// }
// // myNew2('bin', 20) // 123
// var obj = {
//   name: '张学友'
// }
// // myNew2.call(obj)
// // myNew2.apply(obj)
// // myNew2('bin', 20) // 123

// // myNew2.call(obj, '刘德华', 20)
// // myNew2.apply(obj,['刘德华', 20])
// const func = myNew2.bind(obj, '刘德华', 20)
// func()


// var str = ' abc defg '

// var a = 'g'
// console.log('结果是:' + str.trim()+'字符串')

// const result = str.replaceAll(' ', '空格')
// console.log(result)
// var name = '斌'
// var getName = function () {
//     return this.name
// }

// console.log(`我的名字是${getName()}`)

// var a = 'a1.1'
// var b = '1.1b'
// console.log(parseInt(null))
// console.log(parseInt(a))
// console.log(parseFloat(b))
var number = 101

// 1*2^2+0*2+1
// console.log(parseInt(number, 2)); 

// var arr = [0,1,2]
// console.log(arr.map(parseInt)) // 0, NaN, NaN

// console.log(arr.map((item,index) => {
//   return parseInt(item, index)
//   // parseInt(0, 0) 0
//   // parseInt(1, 1) NaN
//   // parseInt(2, 2) NaN
// }))

// var arr = [0,1,2]

// var result = [1,2,...arr]
// console.log(result)

// var list = [{
//   name: '张学友',
//   age: 20
//   // dayu20: 
// },{
//   name: '刘德华',
//   age: 28
// },{
//   name: '黎明',
//   age: 18
// }]

// const result = list.map(item => {
//   return {
//     ...item,
//     dayu20: item.age > 20
//   }
// })
// console.log(result)

// 'use strict'
// const name = '黎明'
// const fun = (a,b) => {
//   var obj = {
//     name: 'obj',
//     getName: () => {
//       console.log(this)
//       console.log(this.name)
//     }
//   }
//   obj.getName()
// }
// fun()
// function Person(name, age) {
//   this.name = name
//   this.age = age
// }
// Person.prototype.getName = function() {
//   console.log(this.name)
// }

// function Student(name) {
//   Person.call(this, name)
// }
// const p1 = new Person('黎明', 50)
// Student.prototype = p1
// const s1 = new Student('张学友')
// console.log(s1)// { name: '张学友', age: undefined}
// console.log(s1.__proto__ === Student.prototype)
// s1.getName()

// console.log(Object.prototype.__proto__)
//s1 age先去自己内部属性里面找

// function Person(name, age=30) {
//   console.log(arguments)
// }
// console.log(Person.name)
// const Student = (...a) => {
//   console.log(a)
// }
// console.log(Student.name)
// // Student('张学友', 30, 'ab', 'c')
// var a = {name: 2, age: 50}
// var result = [{name: '1', age: 30}, {name: 2, age:40},a]
// console.log(result)
// console.log(result.findLastIndex(item => item.name===2))
// var arr = Array.of(3,4,5,6,5,6)
// console.log(arr)

// arr.copyWithin(0, 2, 6)
// console.log(arr)
// result.fill('a', 0 ,2)
// console.log(result)
// const res = result.entries()

// for (const iterator of res) {
//   console.log(iterator)
// }

// console.log(Object.keys(result))
// console.log(Object.values(result))
// console.log(result.includes(a))

var arr = [1, [2,3], [4,5,[6,7,[8,9,[10,11,[12,[13,14]]]]]]]

// var result = [1,2,3,4,5,6,7]

// const result = arr.flat(Infinity)
// console.log(result)

// var name = '斌'
// var obj = {'斌': 'bin',name: '张学友'}
// // obj.name
// console.log(obj[name])


// var arr  = [{name: 'bin', age: 30}, {name: '张学友', age: 20}]
// const result = arr.forEach(item => {
//   item.name = '黎明'
//   return 1
// })
// console.log(arr)
// console.log(result)

// var obj = {
//   name: 'bin',
// }

// var info = {
//   age: 30,
//   address: {
//     city: '北京',
//     street: '北京路'
//   }
// }
// var result = Object.assign({}, obj, info)

// obj.name = '张学友'

// info.address.city = '河南'
// console.log(result)

// var result1 = JSON.parse(JSON.stringify(Object.assign({}, obj, info)))
// obj.name = '张学友'
// info.address.city = '上海'
// console.log(result1)

// var s1 = Symbol()
// var s2 = Symbol()

// var obj = {
//   [s1]: '张学友',
//   [s2]: '周杰伦'
// }

// console.log(s1 === s2); 

// var arr = [1,2,3,2,3,4,5,2,1,6,7,7,8]

// const s1 = new Set(arr)
// console.log([...s1])
// function func() {
// }
// func()
// const a = 456
// function b() {
  // console.log(a);



//   const a = 123

// }


function huijian(callback) {
  console.log('回家路上');
  // 回到家了了
  setTimeout(() => {
    console.log('回到家了');
    callback()
  }, 3000)
}

function chifan(callback) {
  console.log('开始吃饭');
  // 吃饭晚饭了
  setTimeout(() => {
    console.log('吃完饭了')
    callback()
  }, 3000)
}
function shuawan() {
  console.log(789)
}

// huijian(() => {
//   chifan(() => {
//     shuawan()
//   })
// })

var p1 = () => {
  return new Promise((resolve,reject) => {
    console.log('回家路上')
    setTimeout(() => {
      console.log('回家了')
      resolve(123)
    }, 3000)
  })
}
// var p5 = new Promise((resolve, reject) => {
//   console.log('我哥回家路上')
//   setTimeout(() => {
//     console.log('我哥回家了')
//     resolve(456)
//   }, 5000)
// })
// Promise.allSettled([p1, p5]).then(res => {
//   console.log(res,'有结果了')
// }).catch(err => {
//   console.log(err,'失败了')
// })
var p2 = () => {
  console.log('开始吃饭')
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log('吃完饭了')
      resolve(666)
    }, 3000)
  })
}
// var p4 = p2()

// p4.catch(res => {
//   console.log(res)
// }).finally((res) => {
//   console.log(res)
//   console.log('finally')
// })
var p3 = () => {
  console.log('开始刷碗')
  return new Promise((resolve) => {
    setTimeout(() => {
      console.log('刷完了')
      resolve()
    }, 3000)
  })
}
async function doAsync() {
  var p1res = await p1()
  console.log('p1结果', p1res)
  var p2res = await p2()
  console.log('p2结果', p2res)
  await p3()
}
doAsync()
// p1.then(res => {
//   console.log(res)
//   return p2()
// }).then(res=> {
//   return p3()
// })。
var list = {name: 'bin'}
function getName(arr) {
  return arr[0].name
}
// console.log(getName(list))

var object = 'true'
// for (const iterator of list) {
//   console.log(iterator)
// }
// var itera = object[Symbol.iterator]()
// console.log(itera.next())
// console.log(itera.next())
// console.log(itera.next())
// console.log(itera.next())
// console.log(itera.next())


function *getNext() {
  yield 't'
  yield 'r'
  yield 'u'
  return 'e'
}
var nextFunc = getNext()
// console.log(nextFunc.next())
// console.log(nextFunc.next())
// console.log(nextFunc.next())
// console.log(nextFunc.next())

// var obj = {name: 'bin', age: 20, car: '迈巴赫'}
// obj[Symbol.iterator] = function *getNext() {
//   yield {value: {key: 'name',value: 'bin'},done: false}
//   yield {value: {key: 'age',value: 20}, done: false}
//   yield  {value: {key: 'car', value: '迈巴赫'}, done: true}
//   return
// }
// for (const iterator of obj) {
//   console.log(iterator)
// }





